for (let i = 0; i < accessPoints.length; i++) {
// Access points are grouped by network
let ap = accessPoints[i];
+
+ if (ap.get_ssid() == null) {
+ // hidden access point cannot be added, we need to know
+ // the SSID and security details to connect
+ // nevertheless, the access point can acquire a SSID when
+ // NetworkManager connects to it (via nmcli or the control-center)
+ ap._notifySsidId = ap.connect('notify::ssid', Lang.bind(this, this._notifySsidCb));
+ continue;
+ }
+
let pos = this._findNetwork(ap);
let obj;
if (pos != -1) {
}
}
}
+
if (this.device.active_access_point) {
- this._activeNetwork = this._networks[this._findNetwork(this.device.active_access_point)];
+ let networkPos = this._findNetwork(this.device.active_access_point);
+
+ if (networkPos == -1) // the connected access point is invisible
+ this._activeNetwork = null;
+ else
+ this._activeNetwork = this._networks[networkPos];
} else {
this._activeNetwork = null;
}
}
},
+ _notifySsidCb: function(accessPoint) {
+ if (accessPoint.get_ssid() != null) {
+ accessPoint.disconnect(accessPoint._notifySsidId);
+ accessPoint._notifySsidId = 0;
+ this._accessPointAdded(this.device, accessPoint);
+ }
+ },
+
_activeApChanged: function() {
this._activeNetwork = null;
if (activeAp) {
let pos = this._findNetwork(activeAp);
- this._activeNetwork = this._networks[pos];
+
+ if (pos != -1)
+ this._activeNetwork = this._networks[pos];
}
// we don't refresh the view here, setActiveConnection will
},
_findNetwork: function(accessPoint) {
+ if (accessPoint.get_ssid() == null)
+ return -1;
+
for (let i = 0; i < this._networks.length; i++) {
if (this._networkCompare(this._networks[i], accessPoint))
return i;
},
_accessPointAdded: function(device, accessPoint) {
+ if (accessPoint.get_ssid() == null) {
+ // This access point is not visible yet
+ // Wait for it to get a ssid
+ accessPoint._notifySsidId = accessPoint.connect('notify::ssid', Lang.bind(this, this._notifySsidCb));
+ return;
+ }
+
let pos = this._findNetwork(accessPoint);
let apObj;
let needsupdate = false;
},
_createActiveConnectionItem: function() {
- let activeAp = this.device.active_access_point;
let icon, title;
if (this._activeConnection._connection) {
let connection = this._activeConnection._connection;
- if (activeAp)
- this._activeConnectionItem = new NMNetworkMenuItem([ activeAp ], undefined,
- { reactive: false });
+ if (this._activeNetwork)
+ this._activeConnectionItem = new NMNetworkMenuItem(this._activeNetwork.accessPoints, undefined,
+ { reactive: false });
else
this._activeConnectionItem = new PopupMenu.PopupImageMenuItem(connection._name,
'network-wireless-connected',
} else {
// We cannot read the connection (due to ACL, or API incompatibility), but we still show signal if we have it
let menuItem;
- if (activeAp)
- this._activeConnectionItem = new NMNetworkMenuItem([ activeAp ], undefined,
- { reactive: false });
+ if (this._activeNetwork)
+ this._activeConnectionItem = new NMNetworkMenuItem(this._activeNetwork.accessPoints, undefined,
+ { reactive: false });
else
this._activeConnectionItem = new PopupMenu.PopupImageMenuItem(_("Connected (private)"),
'network-wireless-connected',